/*
 ============================================================================
 Name        : Fakultaet.c
 Author      : 
 Version     :
 Copyright   : Your copyright notice
 Description : Hello World in C, Ansi-style
 ============================================================================
 */

#include <stdio.h>
#include <stdlib.h>
#include <math.h>



int fakultaet_rekursiv(int x) {
	int ergebnis = 1;

	if (x == 1)
		return 1;

	else {

		ergebnis = x * fakultaet_rekursiv(x - 1);
	}

	return ergebnis;
}

int fakultaet_iterativ(int x) {
	int ergebnis = 1;

	while (x >= 1) {

		ergebnis = x * ergebnis;

		x--;
	}

	return ergebnis;
}

int potenz(int x) {
	int i;
	int pot = x;

	for (i=x; i < x; i--) {

		pot = pot * x;


	}

	return pot;
}

int hyper_fakultaet(int x) {
	int ergebnis = 1;

	if (x == 1)
		return 1;

	while (x >= 1) {

		ergebnis = potenz(x) * ergebnis;

		x--;

	}

	return ergebnis;
}

int hyper_fakultaet_rekursiv(int x) {
	int ergebnis = 1;

	if (x == 1)
		return 1;

		ergebnis = potenz(x) * hyper_fakultaet_rekursiv(x-1);


	return ergebnis;
}




int main(void) {

	int x = 3;
	double a = 64, b = 0.5;

	printf("\n rekursiv %d! = %d", x, fakultaet_rekursiv(x));
	printf("\n iterativ %d! = %d", x, fakultaet_iterativ(x));

	printf("\n Hyperfakultaet H(%d) = %d", x, hyper_fakultaet(x));
	printf("\n Hyperfakultaet rekursiv H(%d) = %d", x, hyper_fakultaet_rekursiv(x));

	//printf("\n Hyperfakultaet rekursiv H(%f) = %f", a, pow(a, b));



	return EXIT_SUCCESS;
}
